Various data communication infrastructures have been developed that enable a process or method to have requests processed by input/output (IO) devices. In such an architecture, for example, a client submits a request to a process operating in user-mode. The user-mode process submits a file retrieve command to a kernel-mode file server process. After receiving the file retrieve command, the kernel-mode file server process copies the file identified in the file retrieve command to a buffer in non-cache user addressable RAM. Thereafter, the kernel-mode file server process informs the user-mode process of the completed file copy to the buffer. The user-mode process makes a separate system call to a transport protocol invoking a data transmit procedure for transmitting the buffered file to an identified destination, such as an input/output device. The buffered file is then transmitted via the transport protocol.
At no time in such an infrastructure does the user-mode application or process that issued the request have direct access to hardware destinations. Instead, the operating system, operating in kernel mode, acts as an intermediary issuing the requests to the hardware via a corresponding communications protocol. As a result, IO requests and other interprocess communication usually involve a lengthy kernel code path to reach their intended destination, which imposes an undesirable delay.
Consequently, existing infrastructures have failed to adequately keep pace with computer evolution and the increased burden imposed on data servers, application processing, and enterprise computing created by the popular success of the Internet. In particular, high-end computing concepts such as clustering, fail-safe, and 24×7 availability demand greater capacity to move data between processing nodes as well as between a processor node and IO devices. These trends require higher bandwidth and lower latencies, as they tend to push more functionality down to the IO device and demand greater protection, higher isolation, deterministic behavior, and a higher quality of service than conventionally available.
As a result, new architectures are being developed in which a user-level application or process may directly access hardware, such as to issue IO requests. However, by permitting an application or process direct access to hardware, a security issue arises that (if not properly addressed) could compromise access to hardware. Therefore, it is desirable to provide a system and method to facilitate substantially secure communication of data.